﻿using Kaskelot.SP.Services;
using Kaskelot.Web.Services;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Kaskelot.Web.UserControls
{
	public partial class MemberListing : System.Web.UI.UserControl
	{
		public ValdistriktDetailsView Valdistrikt { get; set; }
		public GruppDetailsView Grupp { get; set; }
		public Person Person { get; set; }

		protected void Page_Load(object sender, EventArgs e)
		{
			if (Page.IsPostBack)
				return;

			using (WebService svc = new WebService())
			{
				Person = WebContext.Current.Person;

				bool isA = false;
				LokalDiv.Visible = false;
				DistriktDiv.Visible = false;
				GruppDiv.Visible = false;

				if (Person != null)
				{
					Valdistrikt = svc.GetValdistriktDetailsByPersonId(Person.Id);
					Grupp = svc.GetGruppDetailsByPersonId(Person.Id);

					if (Grupp != null)
					{
						IList<PersonListItem> list = new List<PersonListItem>();

						GruppNamnLabel.Text = Grupp.GruppNamn;

						foreach (BemanningGruppView bg in Grupp.BemanningGruppView)
						{
							if (bg.PersonId == Person.Id)
							{
								isA = bg.FunktionNamn.Trim().ToUpper() == "A";
								break;
							}
						}

						foreach (BemanningGruppView bg in Grupp.BemanningGruppView.OrderBy(bg => bg.FunktionNamn))
						{
							if (bg.PersonId != null)
							{
								if (isA)
									list.Add(new PersonListItem { Funktion = bg.FunktionFullName, PersonNamn = bg.PersonNamn, Epost = bg.Epost, TelNr = bg.TelNr, MobTelNr = bg.MobTelNr, Personnummer = bg.Personnummer });
								else if (bg.FunktionNamn.Trim().ToUpper() == "A")
									list.Add(new PersonListItem { Funktion = bg.FunktionFullName, PersonNamn = bg.PersonNamn, Epost = bg.Epost, TelNr = bg.TelNr, MobTelNr = bg.MobTelNr, Personnummer = "" });
								else
									list.Add(new PersonListItem { Funktion = bg.FunktionFullName, PersonNamn = bg.PersonNamn, Epost = "", TelNr = "", MobTelNr = "", Personnummer = "" });
							}
						}

						GruppPersonRepeater.DataSource = list;
						GruppPersonRepeater.DataBind();
						GruppDiv.Visible = true;
					}

					if (Valdistrikt != null)
					{
						IList<PersonListItem> list = new List<PersonListItem>();

						NamnLabel.Text = Valdistrikt.ValdistriktNamn;
						if (!String.IsNullOrEmpty(Valdistrikt.LokalNamn))
						{
							LokalLabel.Text = Valdistrikt.ByggnadNamn + " - " + Valdistrikt.LokalNamn;
							LokalDiv.Visible = true;
						}

						foreach (BemanningValdistrikt bv in Valdistrikt.BemanningValdistrikt)
						{
							if (bv.PersonId == Person.Id)
							{
								isA = bv.FunktionNamn.Trim().ToUpper() == "A";
								break;
							}
						}

						string epost = "mailto:?bcc=";
						foreach (BemanningValdistrikt bv in Valdistrikt.BemanningValdistrikt.OrderBy(bv => bv.FunktionNamn))
						{
							if (bv.PersonId != null)
							{
								var v = svc.GetPerson(bv.PersonId.Value);

								if (!string.IsNullOrWhiteSpace(v.Epost) && v.Id != Person.Id)
									epost += v.Epost + ";";

								if (isA && WebContext.Current.AuthLevel == AuthenticationLevel.ELeg)
									list.Add(new PersonListItem { Funktion = bv.FunktionFullName, PersonNamn = bv.PersonNamn, Epost = v.Epost, TelNr = v.TelNr, MobTelNr = v.MobTelNr, Personnummer = v.Personnummer });
								else if (bv.FunktionNamn.Trim().ToUpper() == "A")
									list.Add(new PersonListItem { Funktion = bv.FunktionFullName, PersonNamn = bv.PersonNamn, Epost = v.Epost, TelNr = v.TelNr, MobTelNr = v.MobTelNr, Personnummer = "" });
								else
									list.Add(new PersonListItem { Funktion = bv.FunktionFullName, PersonNamn = bv.PersonNamn, Epost = "", TelNr = "", MobTelNr = "", Personnummer = "" });
							}
						}

						PersonRepeater.DataSource = list;
						PersonRepeater.DataBind();
						DistriktDiv.Visible = true;

						if (isA && WebContext.Current.AuthLevel == AuthenticationLevel.ELeg)
						{
							ValdistriktEpost.HRef = epost;
							ValdistriktEpost.Visible = true;
						}
						else
						{
							ValdistriktEpost.Visible = false;
						}
					}
				}
			}
		}
	}

	public class PersonListItem
	{
		public string Funktion { get; set; }
		public string PersonNamn { get; set; }
		public string Epost { get; set; }
		public string TelNr { get; set; }
		public string MobTelNr { get; set; }
		public string Personnummer { get; set; }
	}
}